/*
 * Copyright (c)  2015~2020, xforceplus
 * All rights reserved.
 * Project:datacare-orm
 * Id: UpdateSqlManager.java   2020-10-10 23-32-49
 * Author: Evan
 */
package cn.datacare.orm.manager;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * Title:
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: 2015~2020
 * </p>
 * <p>
 * Company/Department: xforceplus
 * </p>
 *
 * @author Evan
 * <b>Creation Time:</b> 2020-10-10 23-32-49
 * @since V1.0
 */
public interface UpdateSqlManager {
    /**
     * 更新一个对象
     *
     * @param obj
     * @return
     */
    int updateById(Object obj);


    /**
     * 为null的值不参与更新，如果想更新null值，请使用updateById
     *
     * @param obj
     * @return 返回更新的条数
     */
    int updateTemplateById(Object obj);

    /**
     * 根据ID按模板更新
     *
     * @param clazz  clazz对应的表名
     * @param params 参数，仅仅更新paras里包含的值，paras里必须带有主键的值作为更新条件
     * @return 返回更新的条数
     */
    int updateTemplateById(Class clazz, Map<String, Object> params);

    /**
     * 按照模板更新
     *
     * @param clazz
     * @param obj
     * @return int
     */
    int updateTemplateById(Class clazz, Object obj);


    /****
     * 批量更新
     * @param list ,包含pojo（不支持map）
     * @return
     */
    int[] updateByIdBatch(List<?> list);

    /**
     * 执行sql更新（或者删除）操作
     *
     * @param sqlId
     * @param obj
     * @return 返回更新的条数
     */
    int update(String sqlId, Object obj);


    /**
     * 执行sql更新（或者删除）操作
     *
     * @param sqlId
     * @return 返回更新的条数
     */
    int update(String sqlId);

    /**
     * @param sqlId
     * @param params
     * @return
     */
    int update(String sqlId, Map<String, Object> params);

    /**
     * 批量更新
     *
     * @param sqlId
     * @param list
     * @return Object
     */
    int[] updateBatch(String sqlId, List<?> list);

    /**
     * 批量更新
     *
     * @param sqlId
     * @param params  参数放在map里
     * @return
     */
    int[] updateBatch(String sqlId, Map<String, Object>[] params);

    /**
     *
     * @param clazz
     * @param list
     * @return int[]
     */
    int[] updateBatchTemplateById(Class clazz, List<?> list);

    /**
     * 更新指定表
     *
     * @param clazz
     * @param params 参数
     * @return int
     */
    int updateAll(Class<?> clazz, Object params);


}
